package org.x.common.base.util;

import org.x.common.base.constants.UserContext;

import java.util.HashMap;
import java.util.Map;

/**
 * @author 夏包包
 * 通用上下文持有器
 */
public class UserContextHolder {
    private static final ThreadLocal<Map<String, Object>> context = ThreadLocal.withInitial(HashMap::new);

    // 租户ID专用方法（保持原有API兼容）
    public static void setTenantId(String tenantId) {
        put(UserContext.TENANT_ID, tenantId);
    }

    //增加一个超管用的，超管自己设置进去的租户ID
    public static void setCurrentTenantId(String tenantId) {
        put("currentTenantId", tenantId);
    }
    //增加一个超管用的获取当前线程的租户ID
    public static String getCurrentTenantId() {
        return get("currentTenantId");
    }

    public static String getTenantId() {
        return get(UserContext.TENANT_ID);
    }

    // 用户ID专用方法
    public static void setUserId(String userId) {
        put(UserContext.USER_ID, userId);
    }

    public static String getUserId() {
        return get(UserContext.USER_ID);
    }

    // 用户名称专用方法
    public static void setUserName(String userName) {
        put(UserContext.USER_NAME, userName);
    }

    public static String getUserName() {
        return get(UserContext.USER_NAME);
    }

    // 通用存储方法
    public static <T> void put(String key, T value) {
        context.get().put(key, value);
    }

    @SuppressWarnings("unchecked")
    public static <T> T get(String key) {
        return (T) context.get().get(key);
    }

    // 清理方法
    public static void remove(String key) {
        context.get().remove(key);
    }

    public static void clear() {
        context.remove();
    }
}